<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
 * Realiza a interacao entre a aplicacao e a tabela de grupos no banco de dados
 * 
 * @package application/models/adm
 * @name Grupo_model
 * @author Joao Claudio Dias Araujo <joao.araujo@tellks.com.br>
 */
class Servico_model extends CI_Model{
    
    private $tabela;
    
    function __construct() {
        parent::__construct();
        
        $this->tabela = 'servico';
    }
            
    /**
     * Busca todos os grupos do banco de dados
     * 
     * @return array
     */
    function get_all(){
        
        $this->db->select('s.*,st.nome as nome_s,st.id as id_setor');
        
        $this->db->from($this->tabela.' as s');
        $this->db->join('setor AS st', 's.setor_id = st.id', 'LEFT');
        if(!_admin())
        {
            $this->db->where_in('s.setor_id',$this->session->userdata('setores'));
        }        
        $this->db->order_by('s.data_venc');
        $this->db->order_by('s.titulo');
        
        $servico = $this->db->get();
        
        if($servico->num_rows() > 0){
            
            return $servico->result();
        }
        else {
            
            return array();
        }
    }
    
    /**
     * Busca os dados de um grupo pelo seu ID
     * 
     * @param int $id ID do grupo
     * @return mixed
     */
    function get_by_id($id){
        
        $this->db->select('*');
        
        $this->db->from($this->tabela . ' AS s');
        
        $this->db->join('servico_funcionario AS sf','s.id = sf.servico_id','LEFT');
          
        $this->db->where('id', (int)$id);
        
        if(!_admin())
        {
            $this->db->where_in('setor_id',$this->session->userdata('setores'));
        } 
        
        $resultado = $this->db->get();
            
        if($resultado->num_rows() > 0){
            
            $servico = $resultado->row(0);
            $servico->funcionarios = array();
            
            
            foreach ($resultado->result() as $s){
                $servico->funcionarios[] = $s->funcionario_id;
                
            }
            return $servico;
        }
        else{
            
            return false;
        }
    }
            
    /**
     * Insere um grupo no banco de dados
     * 
     * @param sdtClass Object $grupo Objeto contendo os dados do grupo
     * @return boolean
     */
    function inserir($servico){
        $funcionarios = $servico->funcionarios;
        
        unset($servico->funcionarios);
        
        $this->db->insert($this->tabela,$servico);
        
        $inseriu_servico = (bool)  $this->db->affected_rows();
        
        $id = $this->db->insert_id();
        
        $inseriu_funcionarios = $this->salvar_funcionarios($id,$funcionarios);
        
        return $inseriu_servico && $inseriu_funcionarios;
    }
    
    /**
     * atualiza um grupo no banco de dados
     * 
     * @param sdtClass Object $grupo Objeto contendo os dados do grupo
     * @return boolean
     */
    function atualizar($servico){
        $funcionarios = $servico->funcionarios;
        
        unset($servico->funcionarios);
        
        $this->db->where('id', (int)$servico->id);
        
        $this->db->update($this->tabela,$servico);
        
        $atualizou_servico = (bool)  $this->db->affected_rows();
        
        $removeu_funcionarios = $this->remover_funcionarios($servico->id);
        
        $inseriu_funcionarios = $this->salvar_funcionarios($servico->id, $funcionarios);
        
        return ($atualizou_servico || ($removeu_funcionarios || $inseriu_funcionarios));
    }
    
    
    function aprovar($servico){
        
        $this->db->where('id', (int)$servico->id);
        
        $this->db->update($this->tabela,$servico);
        
        return (bool)  $this->db->affected_rows();
        
        
    }
    
    /**
     * Remove um grupo do banco de dados
     * 
     * @param int $id ID do grupo a ser removido
     * @return boolean
     */
    function remover($id){
        
        $this->db->where('id', (int)$id);
        
        $this->db->delete($this->tabela);
        
        return (bool)$this->db->affected_rows();
    }
    
     function salvar_funcionarios($id_servico, $funcionarios){
        
        $insert_array = array();
        
        //Itera sob os grupos selecionados no formulario preparando o array para 
        // Insercao em lote
        foreach ($funcionarios as $f){
            
            $insert_array[] = array(
                'servico_id' => $id_servico,
                'funcionario_id'   => $f
            );
        }
        
        // Se ha valores a serem inseridos
        if(sizeof($insert_array) > 0 ){
            
            // Realiza a insercao em lote
            $this->db->insert_batch('servico_funcionario', $insert_array);
            
            return (bool)$this->db->affected_rows();
        }
        
        return true;
    }
    
    function remover_funcionarios($id_servico){
        
        $this->db->where('servico_id',(int)$id_servico);
        
        $this->db->delete('servico_funcionario');
        
        return (bool)$this->db->affected_rows();
    }
    function get_funcionario_ocupado($servico_id){
        
        $consulta = 'SELECT * FROM ecommerce.servico_funcionario as sf '
                    . 'INNER JOIN funcionario as f on f.id = sf.funcionario_id '
                    . 'where sf.servico_id = ? '
                    . 'AND f.id in(SELECT sf2.funcionario_id FROM servico_funcionario as sf2 '
                    . 'INNER JOIN servico as s on s.id = sf2.servico_id WHERE s.progresso = ?)';
        
        
        $resultado = $this->db->query($consulta,array($servico_id, 2));
        if($resultado->num_rows() > 0 ){
            return $resultado->result();
        }
            else { return array(); }
        
    }
}